"""
为现有用户生成学院和系部信息
"""
import sys
import os
sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))

from dotenv import load_dotenv
load_dotenv()

from app import create_app
from app.extensions import db
from app.models.user import User
import random


# 定义学院和系部数据
COLLEGES_DEPARTMENTS = {
    '计算机学院': [
        '计算机科学与技术系',
        '软件工程系',
        '网络工程系',
        '信息安全系',
        '人工智能系'
    ],
    '信息工程学院': [
        '电子信息工程系',
        '通信工程系',
        '物联网工程系',
        '光电信息科学与工程系'
    ],
    '数据科学学院': [
        '数据科学与大数据技术系',
        '统计学系',
        '应用数学系'
    ],
    '管理学院': [
        '信息管理与信息系统系',
        '电子商务系',
        '工商管理系'
    ],
    '理学院': [
        '数学系',
        '物理系',
        '化学系'
    ]
}


def generate_college_department_data():
    """为现有用户生成学院和系部信息"""
    app = create_app('development')
    
    with app.app_context():
        print("=" * 60)
        print("开始为用户生成学院和系部信息")
        print("=" * 60)
        
        # 查找所有需要更新的用户（学院或系部为空或为默认值）
        users = User.query.filter(
            db.or_(
                User.college == '',
                User.college == '未分配学院',
                User.college == '系统',
                User.department == '',
                User.department == '未分配系部',
                User.department == '管理'
            )
        ).all()
        
        print(f"\n找到 {len(users)} 个需要更新的用户")
        
        if len(users) == 0:
            print("没有需要更新的用户")
            return
        
        updated_count = 0
        
        for user in users:
            # 为管理员保持原有设置
            if user.role == 'admin':
                if user.college in ['', '未分配学院']:
                    user.college = '系统'
                if user.department in ['', '未分配系部']:
                    user.department = '管理'
                print(f"✓ 管理员 {user.username}: {user.college} - {user.department}")
                updated_count += 1
                continue
            
            # 为教师和学生随机分配学院和系部
            college = random.choice(list(COLLEGES_DEPARTMENTS.keys()))
            department = random.choice(COLLEGES_DEPARTMENTS[college])
            
            user.college = college
            user.department = department
            
            role_name = '教师' if user.role == 'teacher' else '学生'
            print(f"✓ {role_name} {user.username}: {college} - {department}")
            updated_count += 1
        
        # 提交更改
        try:
            db.session.commit()
            print("\n" + "=" * 60)
            print(f"✅ 成功更新 {updated_count} 个用户的学院和系部信息")
            print("=" * 60)
            
            # 显示统计信息
            print("\n📊 学院分布统计：")
            for college in COLLEGES_DEPARTMENTS.keys():
                count = User.query.filter_by(college=college).count()
                if count > 0:
                    print(f"  - {college}: {count} 人")
            
        except Exception as e:
            db.session.rollback()
            print(f"\n❌ 更新失败: {str(e)}")
            raise


if __name__ == '__main__':
    generate_college_department_data()


